package com.eduagent.xwqeduagent.api.speechsynthesis.demo;

import com.eduagent.xwqeduagent.api.speechsynthesis.api.SpeechSynthesisService;
import com.eduagent.xwqeduagent.api.speechsynthesis.api.SpeechSynthesisUtil;
import com.eduagent.xwqeduagent.api.speechsynthesis.api.constant.Constants;

/**
 * 高级语音合成示例
 * 展示如何使用多音字和停顿等高级功能
 */
public class AdvancedSpeechDemo {

    public static void main(String[] args) {
        // 在使用前需要设置API密钥信息
        Constants.APP_ID = "637d1630";
        Constants.API_KEY = "8bd0514cb66802c719bbf34a908a0119";
        Constants.API_SECRET = "NzUyY2Y3OTYwYjAyMGExODc5OTM1ZGZl";

        // 显示支持的发音人列表
        System.out.println("支持的发音人列表：");
        String[] voiceList = SpeechSynthesisUtil.getVoiceList();
        for (String voice : voiceList) {
            System.out.println(voice);
        }

        // 准备示例文本
        String originalText = "着手准备项目开发";
        System.out.println("\n原始文本: " + originalText);
        
        // 设置"着"字的发音为"zhuo2"（指定多音字读法）
        String textWithPronunciation = SpeechSynthesisUtil.setPronunciation(originalText, 0, "zhuo2");
        System.out.println("指定多音字发音后: " + textWithPronunciation);
        
        // 添加停顿标记
        String textWithPause = SpeechSynthesisUtil.addPause(textWithPronunciation, 500);
        System.out.println("添加停顿标记后: " + textWithPause);
        
        // 解析标记文本
        String parseResult = SpeechSynthesisUtil.parseMarkedText(textWithPause);
        System.out.println("\n" + parseResult);
        
        // 使用不同的发音人进行语音合成
        synthesizeWithDifferentVoices(textWithPause);
    }
    
    /**
     * 使用不同的发音人合成同一段文本
     * 
     * @param text 要合成的文本
     */
    private static void synthesizeWithDifferentVoices(String text) {
        // 使用三种不同的发音人
        String[] voices = {
            "x4_lingxiaoxuan_oral", // 聆飞逸（成年男）
            "x4_lingyuzhao_oral", // 聆玉言（成年女）
            "x4_lingfeizhe_oral" // 聆佑佑（童年女）
        };
        
        for (int i = 0; i < voices.length; i++) {
            String outputFilePath = "src/main/resources/voice_" + (i + 1) + ".mp3";
            String voiceName = voices[i];
            
            System.out.println("\n使用发音人 " + voiceName + " 合成语音...");
            
            // 创建语音合成服务实例
            SpeechSynthesisService service = new SpeechSynthesisService(
                    outputFilePath,
                    voiceName,
                    new SpeechSynthesisService.SpeechCallback() {
                        @Override
                        public void onSuccess(java.io.File audioFile) {
                            System.out.println("语音合成成功！文件保存在：" + audioFile.getAbsolutePath());
                        }
                        
                        @Override
                        public void onError(int code, String message) {
                            System.err.println("语音合成失败：" + message + "，错误码：" + code);
                        }
                    }
            );
            
            // 进行语音合成
            service.synthesize(text);
            
            // 等待合成完成（实际应用中可能需要更复杂的同步机制）
            try {
                Thread.sleep(5000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
} 